﻿// ConsoleApplication1.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <regex>

using namespace std;
int main()
{
    //单个字符匹配
    // abc  \\w  \\d  \\s  .  *  ? ^ []\
    // \\w ->匹配英文字母、数字、下划线
    //string pattern = "\\w";
    ////编译正则表达式
    //regex reg(pattern);
    ////用正则表达式匹配字符串
    //string ch = "@";
    //bool res = regex_match(ch, reg);
    //cout << res << endl;

    // \\d -> 匹配数字
    /*regex reg("\\d");
    string ch = "@";
    bool res = regex_match(ch, reg);
    cout << res << endl;*/

    // . 除了换行符以外所以字符都能够匹配
    // \\s  匹配的是空白字符

    /*regex reg("\\s");
    string ch = "a";
    bool res = regex_match(ch, reg);
    cout << res << endl;*/

    // \\W  \\D   \\S

    //[] 表示单个字符的匹配 [abc]
    //[a-z]  [A-Z]  [0-9]
    /*regex reg("[a-zA-Z0-9_]");
    bool res = regex_match("H", reg);
    cout << res << endl;*/

    //regex_match() 必须匹配开头和结尾
    //regex_search() 可以在目标字符串中搜索匹配成功的子串
    //regex reg("[ab]hello\\d");
    //string s = "helloahello2";
    ////bool res = regex_match(s, reg);
    //smatch result;
    //bool res = regex_search(s, result, reg);
    ////cout << res << endl;
    //cout << result.str() << endl;

    // + 匹配1个或多个   * 匹配0个或多个  ? 匹配0个或1个
    //regex reg("\\w+\\d+");
    //string s = "hello 123 hello 123456";
    //smatch result;
    //regex_search(s, result, reg);
    //cout << result.str() << endl;

    //匹配开头或结尾  ^  匹配开头  $ 匹配结尾
    /*regex reg("a[a-z]+$");
    string s = "hello abcdef123";
    smatch result;
    regex_search(s, result, reg);
    cout << result.str() << endl;*/

    //可以分组提取数据 () 
    /*regex reg("a(\\d+)[a-zA-Z]+");
    string s = "hello a123hello123";
    smatch result;
    regex_search(s, result, reg);
    cout << result.str() << endl;
    cout << result[1].str() << endl;*/

    //?
   /* regex reg("\\d+?");
    string s = "hello 123 hello";
    smatch result;
    regex_search(s, result, reg);
    cout << result.str() << endl;*/

    //匹配制定个数的字符  {n,m} 匹配n~m个字符
  /*  regex reg("\\d{2,10}");
    string s = "hello 12 hello 12345667";
    smatch result;
    regex_search(s, result, reg);
    cout << result.str() << endl;*/

    //^a 匹配以a开头  [^ab] 匹配的数据不是a或b  
  /*  regex reg("[^ab]hello");
    string s = "chello";
    smatch result;
    regex_search(s, result, reg);
    cout << result.str() << endl;*/

    //手机号码  1 开头
    //个数11位
    //匹配不是以4和7结尾的手机号
    //输出符合条件数据
    //vector<string> vt = { "12345", "13382559932", "18282556677", "13912345674" };
    //regex reg("1\\d{9}[^47]");
    ////bool res;
    //smatch result;
    //for (auto& w : vt) {
    //    if (regex_match(w, result, reg)) {
    //        cout << result.str() << endl;
    //    }
    //}


    //使用迭代器获得所有匹配成功的结果
    string s = "php 90.5 java 95 python 88.5 5A5";
    //转义 
    regex reg("\\d+\\.?\\d*");
    sregex_iterator it(s.begin(), s.end(), reg);
    auto end_it = sregex_iterator();
    while (it != end_it) {
        cout << it->str() << endl;
        ++it;
    }










    
}


